/*
 * @Author: swc shanwenchao12138@163.com
 * @Date: 2024-04-19 13:59:23
 * @LastEditors: wiz
 * @LastEditTime: 2024-07-25 10:31:27
 * @FilePath: \vuexf636\src\components\base\modal\o-interaction\types.ts
 * @Description:
 */
/* eslint-disable max-classes-per-file */
import { ifs } from '@/services';
import Vue from 'vue';
// import { Modal } from 'vxe-table';
import { N_oSimpleTable } from '../../grid/o-simple-table/types';
import { I_cmd } from './command';
/*
props
 // 打开组件的名称
    openCompName: string;
    // 组件配置
    compConf: any;
*/
export namespace N_oInteraction {
  // eslint-disable-next-line no-shadow
  export enum V_cmd {
    FRONTEND_BEHAVIOR = 'frontendBehavior', // 前端行为
    FIELD_EVENT = 'fieldEvent',
    OPEN_FUN = 'openFun',
    FUN_PANEL = 'funPanel',
    UNITE_PANEL = 'unitePanel',
    DIALOG = 'dialog',
    JUMP_TO_FUN = 'jumpToFun',
    EXECUTE_ACTIONS = 'executeActions',
    SEARCH_FILTER = 'searchFilter'
  }
  export interface I_radioOpt {
    label: string;
    value: any;
  }
  export interface I_field {
    fieldID?: string; // '405648538492469248';
    field: string; // 'FName';
    type: string; // 'varchar(120)';
    radioArrang?: string; // h|v (v)Vertical (h)Horizontal
    radioOptions?: Array<I_radioOpt>; // 当redioOptions有配置，form则忽略type来配置itemRender
    isShow?: boolean; // true;
    notNull?: boolean; // false;
    defValue?: string; // '';
    comment?: string; // '';
    selectionID?: string; // null;
    disabled?: boolean; // false;
    defaultFilter?: boolean; // false;
    nodeData?: boolean; // false;
    footerMethod?: any; // null;
    formatter?: any; // { type: ''; decimal: 0; thousandmark: false; currency: '' };
    actions?: any; // { dochange: '' };
    auxProp?: string; // '';
    minWidth?: string; // '150';
    appWeight?: string; // '';
    isDes?: boolean; // false;
    many2one?: {
      toTable: string; // '';
      toField: string; // '';
      isDropdown?: boolean; // false;
      customSearch?: string; // '';
      multiConnect?: string; // '';
      isFunLayout?: boolean; // false;
      fields?: Array<any>; // [];
    };
    align?: string; // 'left';
    subQuery?: string; // '';
    isI18n?: boolean; // false;
    multiOptions?: Array<{
      key: string;
      label: string;
      border: boolean;
      icon: string;
    }>;
  }
  export interface I_form {
    uiID: string;
    formColumnNum?: number; // form 排列数
    // 显示字段
    fields: Array<I_field>;
  }
  export interface I_tableCol extends N_oSimpleTable.I_column {
    field?: string;
  }

  export interface I_table {
    uiID: string;
    columns: Array<I_tableCol>;
  }
  export interface I_groupItem {
    form?: I_form;
    table?: I_table;
  }
  export interface I_group {
    [groupName: string]: Array<I_groupItem>;
  }
  export interface I_panelItem {
    layoutID?: string;
    comps: Array<I_form | I_table>;
  }
  export interface I_panels {
    [panelName: string]: Array<I_panelItem>;
  }

  export interface I_style {
    // 是否允许窗口边缘拖动调整窗口大小
    resize?: boolean;
    // 是否显示关闭按钮
    showClose?: boolean; // default true
    // 标题是否标显示最大化与还原按钮
    showZoom?: boolean; // default true
    // 是否允许按 Esc 键关闭窗口
    escClosable?: boolean; // default false
    // 宽度
    width?: number | string;
    // 高度;
    height?: number | string;
    // 最小宽度
    minWidth?: number | string;
    // 最小高度
    minHeight?: number | string;
    // 是否显示遮罩层
    mask?: boolean; // default false
    // radio 排列
    radioArrang?: 'h'; // Vertical Horizontal default h
    // form 列数
    formColumnNum?: number; // default 1
  }
  export interface I_cellStyle {
    // 背景颜色
    backColor: string;
    // 字体颜色
    fontColor: string;
    // 字体是否加粗
    fontWeight: boolean;
    // 字体是否斜体
    fontStyle: boolean;
    // 字体是否下划线
    fontDec: boolean;
    // 禁止输入
    isDisable: boolean;
  }
  export interface I_cellSettingOpt {
    id: string;
    setValue?: ifs.I_fv[];
    setStyle?: I_cellStyle[];
  }
  export interface I_cellSetting {
    options: Array<I_cellSettingOpt>;
  }

  export interface I_ruleCondition {
    field: string;
    operator: string; // 等于：=， 不等于：!=， 大于：>， 大于等于：>=， 小于：<， 小于等于：<=， 介于：between， 不介于：nbetween， 包含：has， 不包含：nhas
    type: string;
    value: string;
  }

  export interface I_styleContent {
    backgroundColor?: string;
    color?: string;
    fontWeight?: string; // normal、bold、lighter、bolder、100~900、、
    fontStyle?: string; // normal、italic、oblique
    textDecoration?: string; // none、underline、overline、line-through、initial、inherit
  }

  export interface I_editRule {
    field: string;
    editable: boolean;
    conditions: Array<I_ruleCondition>;
  }

  export interface I_styleRule {
    field?: string; // cell和column有，row没有
    style: I_styleContent;
    conditions: Array<I_ruleCondition>;
  }

  export interface I_fieldCell {
    setting?: I_cellSetting;
    rules?: Array<{
      editRules?: Array<I_editRule>;
      styleRules?: Array<I_styleRule>;
    }>;
    // ...
  }
  export interface I_fieldColumn {
    fieldFilter?: object;
    rules?: Array<{
      editRules?: Array<I_editRule>;
      styleRules?: Array<I_styleRule>;
    }>;
    // ...
  }
  export interface I_fieldRow {
    rules?: Array<{
      editRules?: Array<I_editRule>;
      styleRules?: Array<I_styleRule>;
    }>;
    // ...
  }

  // 前端行为 1->跳转功能 2->字段设置 3->联查过滤 4->自定义按钮状态 5->是否刷新 6->切换成编辑状态 7->发送事件
  // 字段设置
  export interface I_fieldSettings {
    cell: I_fieldCell;
    column: I_fieldColumn;
    row: I_fieldRow;
  }
  // 跳转功能
  export interface I_jumpToFunc {
    funName: string;

    // 主功能名
    pageNo: number; // 跳转第几页（仅单据使用）
  }
  // 会话->打开功能
  export interface I_openFun {
    workID: string;
    //  功能名
    funName: string;
    // 过滤
    filter?: Array<ifs.I_fv>;
    globalSearch?: string;
    limit: number;
    customBtns?: Array<{
      key: string;
      title?: string;
      action?: string;
      icon?: string;
      type?: string;
    }>;
    headTitle?: Array<{
      label: string;
      value: string;
    }>;
    // 隐藏列表
    hideList?: {
      areas?: Array<string>;
      toolbar?: Array<any>;
      column?: Array<any>;
    };
    isFunLayout: boolean;
  }

  // 交互功能面板
  export class T_funPanel {
    // 工作ID
    workID: string;

    // 标题
    title: string;

    group: I_group;

    // 初始化值
    initValue?: {
      tableData?: {
        [uiID: string]: Array<{ field: string; value: any }>;
      };
      formData?: {
        [uiID: string]: Array<{ field: string; value: any }>;
      };
    };

    // // 提交动作
    // buttons: {
    //   ok: boolean;
    //   cancel: boolean;
    //   next: boolean;
    //   prev: boolean;
    // };

    style?: I_style;
  }
  export interface I_funPanel extends T_funPanel {}

  // 功能面板返回
  export class T_funPanelRes {
    // 返回
    workID: string;

    actionName: 'ok' | 'cancel';

    data: {
      [uiID: string]: Array<ifs.I_fv>;
    };

    // fields: Array<ifs.I_fv>;
  }
  export interface I_funPanelRes extends T_funPanelRes {}
  // 联合面板
  export class T_unitePanel {
    // 工作ID
    workID: string;

    // 标题
    title: string;

    panels: I_panels;

    layoutStyle: 'tab' | 'collapse';

    // 初始化值
    initValue?: {
      tableData?: {
        [uiID: string]: Array<{ field: string; value: any }>;
      };
      formData?: {
        [uiID: string]: Array<{ field: string; value: any }>;
      };
    };

    style?: I_style;
  }
  export interface I_unitePanel extends T_unitePanel {}

  export class T_unitePanelRes {
    // 返回
    workID: string;

    actionName: 'ok' | 'cancel';

    data: {
      [uiID: string]: Array<ifs.I_fv>;
    };

    // fields: Array<ifs.I_fv>;
  }
  export interface I_unitePanelRes extends T_unitePanelRes {}
  // 对话框
  export class T_dialog {
    // 工作ID
    workID: string;

    // // 提交动作
    // buttons: {
    //   ok: boolean;
    //   cancel: boolean;
    //   // next: boolean;
    //   // prev: boolean;
    // };
    // // 窗口类型
    type: 'alert' | 'confirm' | 'message';

    // 状态
    status: 'info' | 'success' | 'warning' | 'error' | 'loading';

    // 标题 支持国际化
    title: string;

    // 内容 支持国际化
    content: string;
  }
  export interface I_dialog extends T_dialog {}

  // 功能面板返回
  export class T_dialogRes {
    // 返回
    workID: string;

    actionName: 'ok' | 'cancel';
  }
  export interface I_dialogRes extends T_dialogRes {}

  // 关于 执行前端行为 的类型
  export class T_funConfsBehavior {
    fieldSettings?: I_fieldSettings; // 字段设置 （通用）

    refresh?: boolean; // 是否刷新 （通用）

    editable?: boolean; // 切换成编辑状态 （通用）

    setCustomBtnStatus?: {
      title: string; // 按钮名称
      status: boolean; // 状态
    }[]; // 自定义按钮状态 （通用）

    // searchFilter?: any; // 查询过滤 （通用）

    filter?: any;
  }
  export interface I_funConfsBehavior extends T_funConfsBehavior {}

  export class T_frontendBehavior {
    funConfs?: {
      [key: string]: I_funConfsBehavior;
    };

    action?: {
      // jumpToFun?: I_jumpToFunc; // 跳转功能 （通用）

      download?: any;

      crossSystem?: any;

      events?: any; // 字段事件 （表格专用）
    };
  }
  export interface I_frontendBehavior extends T_frontendBehavior {}

  export interface I_frontendBehaviorConf {
    cmd: V_cmd;
    // frontendBehavior?: { [key: string]: I_frontendBehavior };
    frontendBehavior?: I_frontendBehavior;
  }

  // 关于 字段事件fieldEvent 的类型
  export class T_fieldEvent {
    updFields?: { [tableAndFieldName: string]: any };

    fieldsStatus?: { [tableAndFieldName: string]: boolean };

    actions?: {
      [actionName: string]: any;
    };
  }
  export interface I_fieldEvent extends T_fieldEvent {}

  export interface I_srvCmd {
    cmd: V_cmd;
    updFields?: { [tableAndFieldName: string]: any };

    fieldsStatus?: { [tableAndFieldName: string]: boolean };

    actions?: {
      [actionName: string]: any;
    };
  }

  // 关于 打开新页签jumpToFun 的类型
  export class T_jumpToFun {
    // 功能组件类型 // 换成类替代
    funName: string;

    // 主功能名
    pageNo: number; // 跳转第几页（仅单据使用）

    actions?: {
      [actionName: string]: any;
    };
  }
  export interface I_jumpToFun extends T_jumpToFun {}

  export interface I_jumpToFunConf {
    cmd: V_cmd;
    funName: string; // 主功能名
    pageNo: number; // 跳转第几页（仅单据使用）
    actions?: {
      [actionName: string]: any;
    };
  }

  // 关于 执行前端动作（函数）handleActions 的类型
  export class T_executeActions {
    actions: {
      [actionName: string]: any;
    };
  }
  export interface I_executeActions extends T_executeActions {}

  export interface I_executeActionsConf {
    cmd: V_cmd;
    actions: {
      [actionName: string]: any;
    };
  }

  // 关于 关于联查过滤条件的设置 的类型
  export class T_searchFilter {
    m2oFilter?: object;
  }
  export interface I_searchFilter extends T_searchFilter {}

  export interface I_searchFilterConf {
    cmd: V_cmd;
    m2oFilter?: object;
  }

  export type I_msgContent =
    | I_openFun
    | I_funPanel
    | I_unitePanel
    | I_dialog
    | I_frontendBehavior
    | I_fieldEvent
    | I_jumpToFun
    | I_executeActions
    | I_searchFilter;
  // 消息
  export class T_msg {
    cmd: V_cmd;

    // 消息内容
    msgContent: I_msgContent;

    // 下一步处理
    next?: {
      ok: {
        spName: string;
      };
      cancel: {
        spName: string;
      };
    };
  }
  export interface I_msg extends T_msg {}
  export interface I_conf {
    // 打开组件的名称 保留扩展
    openCompName?: string;
    cmd: V_cmd;
    workID: string;
    // 组件绑定
    compBind: any; // vxe-table Modal
    // 组件配置
    compConf: any;
    // 事件名
    // eventNames: Array<string>;
  }
  export interface oInteraction extends Vue {
    /* 组件名 */
    name: string;

    G_compName: string;

    /* 组件箱信息对象 */
    GT_compBoxInfo: ifs.I_compBoxInfo;

    /* 组件箱对象 */
    GT_compBox: ifs.I_compBox;

    /* 组件箱识别ID */
    G_compID: string;

    /* 指挥部 */
    GT_command: I_cmd;

    cf: N_oInteraction.I_conf;
  }
}
